package com.hospital.workstation.domain.vo;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.hospital.common.annotation.ExcelDictFormat;
import com.hospital.common.convert.ExcelDictConvert;
import lombok.Data;

import java.util.Date;


/**
 * 患者基本信息视图对象 patient_base_info
 *
 * @author whb
 * @date 2023-02-08
 */
@Data
@ExcelIgnoreUnannotated
public class PatientBaseInfoVo {

    private static final long serialVersionUID = 1L;

    /**
     * 患者ID
     */
    @ExcelProperty(value = "患者ID")
    private Long id;

    /**
     * 患者姓名
     */
    @ExcelProperty(value = "患者姓名")
    private String patientName;

    /**
     * 病历号
     */
    @ExcelProperty(value = "病历号")
    private Integer medicalRecordNo;

    /**
     * 就诊号码（HIS中就诊唯一标识）
     */
    @ExcelProperty(value = "HIS中就诊唯一标识")
    private String paadmVisitNo;

    /**
     * ID号
     */
    @ExcelProperty(value = "患者编号/ID号")
    private String patientNo;

    /**
     * 科室/病区ID
     */
    @ExcelProperty(value = "科室/病区ID")
    private Long deptId;

    /**
     * 科室/病区名称
     */
    private String deptName;

    /**
     * 入院时间
     */
    @ExcelProperty(value = "入院时间")
    private LocalDateTime admissionTime;

    /**
     * 出院时间
     */
    @ExcelProperty(value = "出院时间")
    private LocalDateTime dischargeTime;

    /**
     * 临床药师ID
     */
    @ExcelProperty(value = "临床药师ID")
    private Long doctorId;

    /**
     * 临床药师名称
     */
    private String doctorName;

    /**
     * 床号
     */
    @ExcelProperty(value = "床号")
    private String bedNo;

    /**
     * 第一诊断
     */
    @ExcelProperty(value = "第一诊断")
    private String firstDiagnose;

    /**
     * 监护分级（0一级 1二级 2三级）
     */
    @ExcelProperty(value = "监护分级", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "0=一级,1=二级,2=三级")
    private String guardianLevel;

    /**
     * 住院状态（0住院患者 1出院患者）
     */
    @ExcelProperty(value = "住院状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "0=住院患者,1=出院患者")
    private String patientState;

    /**
     * 住院状态标签
     */
    private String patientStateStr;

    /**
     * 出生日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date birthdate;

    /**
     * 患者性别（1男 2女 3未知）
     */
    @ExcelProperty(value = "患者性别", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "1=男,2=女,3=未知")
    private String patientSex;

    /**
     * 年龄
     */
    @ExcelProperty(value = "年龄")
    private Integer patientAge;

    /**
     * 月份
     */
    @ExcelProperty(value = "月份")
    private Integer patientMonth;

    /**
     * 职业
     */
    @ExcelProperty(value = "职业")
    private String patientProfession;

    /**
     * 民族
     */
    @ExcelProperty(value = "民族")
    private String nation;

    /**
     * 身高（cm）
     */
    @ExcelProperty(value = "身高", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "c=m")
    private BigDecimal patientHeight;

    /**
     * 体重（kg）
     */
    @ExcelProperty(value = "体重", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "k=g")
    private BigDecimal patientWeight;

    /**
     * BMI（kg/㎡）
     */
    @ExcelProperty(value = "BMI", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "k=g/㎡")
    private BigDecimal patientBmi;

    /**
     * 联系方式
     */
    @ExcelProperty(value = "联系方式")
    private String phoneNo;

    /**
     * 付费方式（0支付宝 1微信 2现金 07全自费）
     */
    @ExcelProperty(value = "付费方式", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "0=支付宝,1=微信,2=现金,07=全自费")
    private String payWay;

    /**
     * 患者信息来源（0手工录入 1HIS）
     */
    @ExcelProperty(value = "数据来源", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "0=手工录入,1=HIS")
    private String sourceInfo;

    /**
     * 入院次数
     */
    @ExcelProperty(value = "入院次数")
    private String visitTimes;

    /**
     * 病案号
     */
    @ExcelProperty(value = "病案号")
    private String medicareNo;

    /**
     * HIS科室代码
     */
    @ExcelProperty(value = "HIS科室代码")
    private String paadDeptCode;

    /**
     * 入院病区代码
     */
    @ExcelProperty(value = "入院病区代码")
    private String medicareWardCode;

    /**
     * 移除历史药历，传值0
     */
    @ExcelProperty(value = "移除历史药历，传值0")
    private String moveHistory;

    /**
     * 签名
     */
    private String sign;

    /**
     * 住院天数
     */
    private String inDays;

    /**
     * 病名
     */
    private String illnessName;

    /**
     * 症型
     */
    private String symptomName;

    /**
     * 处方审核病症按钮的显示标识（0 显示 1 不显示）
     */
    private String diagFlag;

    /**
     * 药历完成状态（0未完成 1已完成）
     */
    private String summaryState;

    /**
     * 是否存在电子监测表（0不存在 1存在）
     */
    private String isHaveMonitor;
}
